let callback = [];
let pending = false;
function flush() {
  callback.forEach((cb) => cb());
  pending = false;
}
let timerFunc;
//处理兼容问题
if (Promise) {
  timerFunc = () => {
    Promise.resolve().then(flush); //异步执行
  };
} else if (
  //MutationObserver h5 异步方法可以监听dom变化，监控完毕之后再来异步更新
  MutationObserver
) {
  let observe = new MutationObserver(flush);
  let textNode = document.createTextNode(1); //创建文本
  observe.observe(textNode, { characterData: true }); //g观测文本的内容
  timerFunc = () => {
    textNode.textContent = 2;
  };
} else if (setImmediate) {
  //IE 支持的定时器
  timerFunc = () => {
    setImmediate(flush);
  };
}
export function nextTick(cb) {
  // 两次调用 1.vue数据更新时候调用
  //2.用户自己方法调用 用列队实现 cb是分别传进来的方法[cb1,cb2]
  callback.push(cb);
  //promise.then vue3
  if (!pending) {
    timerFunc(); //异步方法 执行
    pending = true;
  }
}
